/*
输入描述：
第一行输入要排序的人的个数n，第二行输入一个整数表示排序的方式，之后n行分别输入他们的名字和成绩，以一个空格隔开

输出描述：
按照指定方式输出名字和成绩，名字和成绩之间以一个空格隔开

输入：
3
0
fang 90
yang 50
ning 70
输出：
fang 90
ning 70
yang 50


输入：
3
1
fang 90
yang 50
ning 70
输出：
yang 50
ning 70
fang 90
*/


// 归并排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
    int index;
    char name[20];
    int grade;
} Na;

int myCompareH2L(const void *item1, const void *item2)
{
    Na *p1 = (Na *)item1;
    Na *p2 = (Na *)item2;

    if (p1->grade != p2->grade) {
        /* 同分降序 */
        return p2->grade - p1->grade;
    } else {
        // 同分按谁先输入就谁在左边：return p1->index - p2->index;
        // 同分按姓名排序：return strcmp(p1->name, p2->name);
        return p1->index - p2->index;
    }
}

int myCompareL2H(const void *item1, const void *item2)
{
    Na *p1 = (Na *)item1;
    Na *p2 = (Na *)item2;

    if (p1->grade != p2->grade) {
        /* 同分升序 */
        return p1->grade - p2->grade;
    } else {
        return p1->index - p2->index;
    }
}

int main()
{
    int num, k;
    while (scanf("%d%d", &num, &k) != EOF) {
        Na Name_list[num];
        int i;
        for (i = 0; i < num; i++) {
            scanf("%s", Name_list[i].name);
            scanf("%d", &Name_list[i].grade);
            Name_list[i].index = i;
        }
        if (k == 0) {
            qsort(Name_list, num, sizeof(Na), myCompareH2L);
        } else if (k == 1) {
            qsort(Name_list, num, sizeof(Na), myCompareL2H);
        }
        for (i = 0; i < num; i++) {
            printf("%s %d\n", Name_list[i].name, Name_list[i].grade);
        }
    }
}

